<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 箭头函数是es6新增的一种函数的书写方式
    // 从形式上来说，就是省略了function关键字，并且需要加上 =>

    // 声明式函数
    function fn1() {
      console.log(123);
    }
    // 赋值式函数
    const fn2 = function() {
      console.log(123);
    }
    // 赋值式的箭头函数
    const fn3 = () => {
      console.log(123);
    }



    // 当箭头函数只有一个参数的时候，可以省略小括号
    // 如果没有参数，或者多个参数，不能省略
    // const add = a => {
    //   console.log(a + 4);
    // }
    // add(3);


    // 当大括号里面的语句只有一句话的时候，那么大括号也可以省略
    // const add = a => console.log(1);
    // add(3);


    // 当大括号省略的时候，会默认加上return关键字
    // const add = () => 123;
    // const a = add();
    // console.log(a);




    const arr = [1,2,3,4,5,6];
    const newArr = arr.map(function(item) {
      return item * 2;
    });
    const newArr2 = arr.map((item) => {
      return item * 2;
    });
    const newArr3 = arr.map(item => item * 2);


    setTimeout(function() {
      console.log(123);
    }, 2000)
    setTimeout(() => {
      console.log(123);
    }, 2000)



    function outerFunction() {
      let a = 10;
      function innerFuntion() {
        return a;
      }
      return innerFuntion;
    }
    outerFunction()();

    const outerFunction2 = () => {
      let a = 10;
      return () => {
        return a;
      }
    }

    const outerFunction3 = () => {
      return () => {
        return 123;
      }
    }
    // 柯里化函数(curry function)
    const outerFunction4 = () => () => 123;



    

    // 构造函数是不能用箭头函数写的
  </script>
</body>
</html>